#Demo9.ps1
# Imbrication de contextes. On utilise une propri?t? locale

New-LogColoredConsoleAppender $LogDefaultColors|`
    #On ajoute un objet Layout ? l'appender pr?c?dement cr??
    #!!!!!!!!!
    # Le premier param?tre attendu est renseign? via le pipeleline,
    # on doit donc pr?ciser le nom du param?tre ( -L ), sinon l'affectation se fait 
    # sur le premier param?tre, ce qui provoquera des erreurs de typage. 
    #!!!!!!!!!
 Add-LogLayout -L "[%thread] %-5level (%x) -%message%newline"|`
 Enable-LogAppender|`
   #Configure le framework avec l'appender provenant du pipeline
 Set-LogBasicConfigurator 
 
$LogMain  = Get-LogLogger "Main"


Function Une {
   #D?clare une propri?t? locale r?f?renc?e par la macro %x du layout de l'appender ROOT.
Push-ThreadContext "NDC" $($myinvocation.MyCommand)
$LogMain.Info("Dans la fonction Une")
Deux
 #on n'utilise pas la valeur de retour
$Null=Pop-ThreadContext "NDC"
#La propri?t? locale n'a plus d'existence
#On r?f?rencera d?sormais celle sur le haut de la pile. 
}

Function Deux {
Push-ThreadContext "NDC" $($myinvocation.MyCommand)
$LogMain.Info("Dans la fonction Deux")
Trois
$Null=Pop-ThreadContext "NDC"
}

Function Trois {
  #Si on ne r?d?clare pas localement la propri?t?
  # on utilisera la derni?re d?clar?e, c'est ? dire celle sur le haut de la pile.
Push-ThreadContext "NDC" $($myinvocation.MyCommand)
$LogMain.Info("Dans la fonction Trois")
$Null=Pop-ThreadContext "NDC"
}

$LogMain.Info("Appel la fonction Une ")
Une
$LogMain.Info("Fin")

Stop-log

